home *** CD-ROM | disk | FTP | other *** search
- #define EXTERN extern
- #include "texd.h"
-
- void zcharwarning ( f , c )
- internalfontnumber f ;
- eightbits c ;
- {charwarning_regmem
- if ( eqtb [ 6198 ] .cint > 0 )
- {
- begindiagnostic () ;
- printnl ( 818 ) ;
- print ( c ) ;
- print ( 819 ) ;
- print ( fontname [ f ] ) ;
- printchar ( 33 ) ;
- enddiagnostic ( false ) ;
- }
- }
- halfword znewcharacter ( f , c )
- internalfontnumber f ;
- eightbits c ;
- {/* 10 */ register halfword Result; newcharacter_regmem
- halfword p ;
- if ( fontbc [ f ] <= c )
- if ( fontec [ f ] >= c )
- if ( ( fontinfo [ charbase [ f ] + c ] .qqqq .b0 > 0 ) )
- {
- p = getavail () ;
- mem [ p ] .hh.b0 = f ;
- mem [ p ] .hh.b1 = c ;
- Result = p ;
- return(Result) ;
- }
- charwarning ( f , c ) ;
- Result = 0 ;
- return(Result) ;
- }
- void dviswap ( )
- {dviswap_regmem
- if ( dvilimit == dvibufsize )
- {
- writedvi ( 0 , halfbuf - 1 ) ;
- dvilimit = halfbuf ;
- dvioffset = dvioffset + dvibufsize ;
- dviptr = 0 ;
- }
- else {
-
- writedvi ( halfbuf , dvibufsize - 1 ) ;
- dvilimit = dvibufsize ;
- }
- dvigone = dvigone + halfbuf ;
- }
- void zdvifour ( x )
- integer x ;
- {dvifour_regmem
- if ( x >= 0 )
- {
- dvibuf [ dviptr ] = x / 16777216L ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- else {
-
- x = x + 1073741824L ;
- x = x + 1073741824L ;
- {
- dvibuf [ dviptr ] = ( x / 16777216L ) + 128 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- }
- x = x % 16777216L ;
- {
- dvibuf [ dviptr ] = x / 65536L ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- x = x % 65536L ;
- {
- dvibuf [ dviptr ] = x / 256 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = x % 256 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- }
- void zdvipop ( l )
- integer l ;
- {dvipop_regmem
- if ( ( l == dvioffset + dviptr ) && ( dviptr > 0 ) )
- decr ( dviptr ) ;
- else {
-
- dvibuf [ dviptr ] = 142 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- }
- void zdvifontdef ( f )
- internalfontnumber f ;
- {dvifontdef_regmem
- poolpointer k ;
- {
- dvibuf [ dviptr ] = 243 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = f - 1 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = fontcheck [ f ] .b0 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = fontcheck [ f ] .b1 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = fontcheck [ f ] .b2 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = fontcheck [ f ] .b3 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- dvifour ( fontsize [ f ] ) ;
- dvifour ( fontdsize [ f ] ) ;
- {
- dvibuf [ dviptr ] = ( strstart [ fontarea [ f ] + 1 ] - strstart [
- fontarea [ f ] ] ) ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = ( strstart [ fontname [ f ] + 1 ] - strstart [
- fontname [ f ] ] ) ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {register integer for_end; k = strstart [ fontarea [ f ] ] ; for_end =
- strstart [ fontarea [ f ] + 1 ] - 1 ; if ( k <= for_end) do
- {
- dvibuf [ dviptr ] = strpool [ k ] ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- while ( k++ < for_end ) ; }
- {register integer for_end; k = strstart [ fontname [ f ] ] ; for_end =
- strstart [ fontname [ f ] + 1 ] - 1 ; if ( k <= for_end) do
- {
- dvibuf [ dviptr ] = strpool [ k ] ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- while ( k++ < for_end ) ; }
- }
- void zmovement ( w , o )
- scaled w ;
- eightbits o ;
- {/* 10 40 45 2 1 */ movement_regmem
- smallnumber mstate ;
- halfword p, q ;
- integer k ;
- q = getnode ( 3 ) ;
- mem [ q + 1 ] .cint = w ;
- mem [ q + 2 ] .cint = dvioffset + dviptr ;
- if ( o == 157 )
- {
- mem [ q ] .hh .v.RH = downptr ;
- downptr = q ;
- }
- else {
-
- mem [ q ] .hh .v.RH = rightptr ;
- rightptr = q ;
- }
- p = mem [ q ] .hh .v.RH ;
- mstate = 0 ;
- while ( p != 0 ) {
-
- if ( mem [ p + 1 ] .cint == w )
- switch ( mstate + mem [ p ] .hh .v.LH )
- {case 3 :
- case 4 :
- case 15 :
- case 16 :
- if ( mem [ p + 2 ] .cint < dvigone )
- goto lab45 ;
- else {
-
- k = mem [ p + 2 ] .cint - dvioffset ;
- if ( k < 0 )
- k = k + dvibufsize ;
- dvibuf [ k ] = dvibuf [ k ] + 5 ;
- mem [ p ] .hh .v.LH = 1 ;
- goto lab40 ;
- }
- break ;
- case 5 :
- case 9 :
- case 11 :
- if ( mem [ p + 2 ] .cint < dvigone )
- goto lab45 ;
- else {
-
- k = mem [ p + 2 ] .cint - dvioffset ;
- if ( k < 0 )
- k = k + dvibufsize ;
- dvibuf [ k ] = dvibuf [ k ] + 10 ;
- mem [ p ] .hh .v.LH = 2 ;
- goto lab40 ;
- }
- break ;
- case 1 :
- case 2 :
- case 8 :
- case 13 :
- goto lab40 ;
- break ;
- default:
- ;
- break ;
- }
- else switch ( mstate + mem [ p ] .hh .v.LH )
- {case 1 :
- mstate = 6 ;
- break ;
- case 2 :
- mstate = 12 ;
- break ;
- case 8 :
- case 13 :
- goto lab45 ;
- break ;
- default:
- ;
- break ;
- }
- p = mem [ p ] .hh .v.RH ;
- }
- lab45: ;
- mem [ q ] .hh .v.LH = 3 ;
- if ( abs ( w ) >= 8388608L )
- {
- {
- dvibuf [ dviptr ] = o + 3 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- dvifour ( w ) ;
- return ;
- }
- if ( abs ( w ) >= 32768L )
- {
- {
- dvibuf [ dviptr ] = o + 2 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- if ( w < 0 )
- w = w + 16777216L ;
- {
- dvibuf [ dviptr ] = w / 65536L ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- w = w % 65536L ;
- goto lab2 ;
- }
- if ( abs ( w ) >= 128 )
- {
- {
- dvibuf [ dviptr ] = o + 1 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- if ( w < 0 )
- w = w + 65536L ;
- goto lab2 ;
- }
- {
- dvibuf [ dviptr ] = o ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- if ( w < 0 )
- w = w + 256 ;
- goto lab1 ;
- lab2: {
-
- dvibuf [ dviptr ] = w / 256 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- lab1: {
-
- dvibuf [ dviptr ] = w % 256 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- return ;
- lab40: mem [ q ] .hh .v.LH = mem [ p ] .hh .v.LH ;
- if ( mem [ q ] .hh .v.LH == 1 )
- {
- {
- dvibuf [ dviptr ] = o + 4 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- while ( mem [ q ] .hh .v.RH != p ) {
-
- q = mem [ q ] .hh .v.RH ;
- switch ( mem [ q ] .hh .v.LH )
- {case 3 :
- mem [ q ] .hh .v.LH = 5 ;
- break ;
- case 4 :
- mem [ q ] .hh .v.LH = 6 ;
- break ;
- default:
- ;
- break ;
- }
- }
- }
- else {
-
- {
- dvibuf [ dviptr ] = o + 9 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- while ( mem [ q ] .hh .v.RH != p ) {
-
- q = mem [ q ] .hh .v.RH ;
- switch ( mem [ q ] .hh .v.LH )
- {case 3 :
- mem [ q ] .hh .v.LH = 4 ;
- break ;
- case 5 :
- mem [ q ] .hh .v.LH = 6 ;
- break ;
- default:
- ;
- break ;
- }
- }
- }
- }
- void zprunemovements ( l )
- integer l ;
- {/* 30 10 */ prunemovements_regmem
- halfword p ;
- while ( downptr != 0 ) {
-
- if ( mem [ downptr + 2 ] .cint < l )
- goto lab30 ;
- p = downptr ;
- downptr = mem [ p ] .hh .v.RH ;
- freenode ( p , 3 ) ;
- }
- lab30: while ( rightptr != 0 ) {
-
- if ( mem [ rightptr + 2 ] .cint < l )
- return ;
- p = rightptr ;
- rightptr = mem [ p ] .hh .v.RH ;
- freenode ( p , 3 ) ;
- }
- }
- void zspecialout ( p )
- halfword p ;
- {specialout_regmem
- schar oldsetting ;
- poolpointer k ;
- if ( curh != dvih )
- {
- movement ( curh - dvih , 143 ) ;
- dvih = curh ;
- }
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- oldsetting = selector ;
- selector = 21 ;
- showtokenlist ( mem [ mem [ p + 1 ] .hh .v.RH ] .hh .v.RH , 0 , poolsize -
- poolptr ) ;
- selector = oldsetting ;
- {
- if ( poolptr + 1 > poolsize )
- overflow ( 257 , poolsize - initpoolptr ) ;
- }
- if ( ( poolptr - strstart [ strptr ] ) < 256 )
- {
- {
- dvibuf [ dviptr ] = 239 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = ( poolptr - strstart [ strptr ] ) ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- }
- else {
-
- {
- dvibuf [ dviptr ] = 242 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- dvifour ( ( poolptr - strstart [ strptr ] ) ) ;
- }
- {register integer for_end; k = strstart [ strptr ] ; for_end = poolptr - 1
- ; if ( k <= for_end) do
- {
- dvibuf [ dviptr ] = strpool [ k ] ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- while ( k++ < for_end ) ; }
- poolptr = strstart [ strptr ] ;
- }
- void zwriteout ( p )
- halfword p ;
- {writeout_regmem
- schar oldsetting ;
- integer oldmode ;
- smallnumber j ;
- halfword q, r ;
- q = getavail () ;
- mem [ q ] .hh .v.LH = 637 ;
- r = getavail () ;
- mem [ q ] .hh .v.RH = r ;
- mem [ r ] .hh .v.LH = 7617 ;
- begintokenlist ( q , 4 ) ;
- begintokenlist ( mem [ p + 1 ] .hh .v.RH , 15 ) ;
- q = getavail () ;
- mem [ q ] .hh .v.LH = 379 ;
- begintokenlist ( q , 4 ) ;
- oldmode = curlist .modefield ;
- curlist .modefield = 0 ;
- curcs = writeloc ;
- q = scantoks ( false , true ) ;
- gettoken () ;
- if ( curtok != 7617 )
- {
- {
- if ( interaction == 3 )
- wakeupterminal () ;
- printnl ( 262 ) ;
- print ( 1287 ) ;
- }
- {
- helpptr = 2 ;
- helpline [ 1 ] = 1288 ;
- helpline [ 0 ] = 1005 ;
- }
- error () ;
- do {
- gettoken () ;
- } while ( ! ( curtok == 7617 ) ) ;
- }
- curlist .modefield = oldmode ;
- endtokenlist () ;
- oldsetting = selector ;
- j = mem [ p + 1 ] .hh .v.LH ;
- if ( writeopen [ j ] )
- selector = j ;
- else {
-
- if ( ( j == 17 ) && ( selector == 19 ) )
- selector = 18 ;
- printnl ( 335 ) ;
- }
- tokenshow ( defref ) ;
- println () ;
- flushlist ( defref ) ;
- selector = oldsetting ;
- }
- void zoutwhat ( p )
- halfword p ;
- {outwhat_regmem
- smallnumber j ;
- switch ( mem [ p ] .hh.b1 )
- {case 0 :
- case 1 :
- case 2 :
- if ( ! doingleaders )
- {
- j = mem [ p + 1 ] .hh .v.LH ;
- if ( mem [ p ] .hh.b1 == 1 )
- writeout ( p ) ;
- else {
-
- if ( writeopen [ j ] )
- aclose ( writefile [ j ] ) ;
- if ( mem [ p ] .hh.b1 == 2 )
- writeopen [ j ] = false ;
- else if ( j < 16 )
- {
- curname = mem [ p + 1 ] .hh .v.RH ;
- curarea = mem [ p + 2 ] .hh .v.LH ;
- curext = mem [ p + 2 ] .hh .v.RH ;
- if ( curext == 335 )
- curext = 784 ;
- packfilename ( curname , curarea , curext ) ;
- while ( ! aopenout ( writefile [ j ] ) ) promptfilename ( 1290 , 784
- ) ;
- writeopen [ j ] = true ;
- }
- }
- }
- break ;
- case 3 :
- specialout ( p ) ;
- break ;
- case 4 :
- ;
- break ;
- default:
- confusion ( 1289 ) ;
- break ;
- }
- }
- void hlistout ( )
- {/* 21 13 14 15 */ hlistout_regmem
- scaled baseline ;
- scaled leftedge ;
- scaled saveh, savev ;
- halfword thisbox ;
- glueord gorder ;
- schar gsign ;
- halfword p ;
- integer saveloc ;
- halfword leaderbox ;
- scaled leaderwd ;
- scaled lx ;
- boolean outerdoingleaders ;
- scaled edge ;
- thisbox = tempptr ;
- gorder = mem [ thisbox + 5 ] .hh.b1 ;
- gsign = mem [ thisbox + 5 ] .hh.b0 ;
- p = mem [ thisbox + 5 ] .hh .v.RH ;
- incr ( curs ) ;
- if ( curs > 0 )
- {
- dvibuf [ dviptr ] = 141 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- if ( curs > maxpush )
- maxpush = curs ;
- saveloc = dvioffset + dviptr ;
- baseline = curv ;
- leftedge = curh ;
- while ( p != 0 ) lab21: if ( ( p >= himemmin ) )
- {
- if ( curh != dvih )
- {
- movement ( curh - dvih , 143 ) ;
- dvih = curh ;
- }
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- do {
- f = mem [ p ] .hh.b0 ;
- c = mem [ p ] .hh.b1 ;
- if ( f != dvif )
- {
- if ( ! fontused [ f ] )
- {
- dvifontdef ( f ) ;
- fontused [ f ] = true ;
- }
- if ( f <= 64 )
- {
- dvibuf [ dviptr ] = f + 170 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- else {
-
- {
- dvibuf [ dviptr ] = 235 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = f - 1 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- }
- dvif = f ;
- }
- if ( c >= 128 )
- {
- dvibuf [ dviptr ] = 128 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- {
- dvibuf [ dviptr ] = c ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- curh = curh + fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + c
- ] .qqqq .b0 ] .cint ;
- p = mem [ p ] .hh .v.RH ;
- } while ( ! ( ! ( p >= himemmin ) ) ) ;
- dvih = curh ;
- }
- else {
-
- switch ( mem [ p ] .hh.b0 )
- {case 0 :
- case 1 :
- if ( mem [ p + 5 ] .hh .v.RH == 0 )
- curh = curh + mem [ p + 1 ] .cint ;
- else {
-
- saveh = dvih ;
- savev = dviv ;
- curv = baseline + mem [ p + 4 ] .cint ;
- tempptr = p ;
- edge = curh ;
- if ( mem [ p ] .hh.b0 == 1 )
- vlistout () ;
- else hlistout () ;
- dvih = saveh ;
- dviv = savev ;
- curh = edge + mem [ p + 1 ] .cint ;
- curv = baseline ;
- }
- break ;
- case 2 :
- {
- ruleht = mem [ p + 3 ] .cint ;
- ruledp = mem [ p + 2 ] .cint ;
- rulewd = mem [ p + 1 ] .cint ;
- goto lab14 ;
- }
- break ;
- case 8 :
- outwhat ( p ) ;
- break ;
- case 10 :
- {
- g = mem [ p + 1 ] .hh .v.LH ;
- rulewd = mem [ g + 1 ] .cint ;
- if ( gsign != 0 )
- {
- if ( gsign == 1 )
- {
- if ( mem [ g ] .hh.b0 == gorder )
- rulewd = rulewd + round ( mem [ thisbox + 6 ] .gr * mem [ g + 2 ]
- .cint ) ;
- }
- else {
-
- if ( mem [ g ] .hh.b1 == gorder )
- rulewd = rulewd - round ( mem [ thisbox + 6 ] .gr * mem [ g + 3 ]
- .cint ) ;
- }
- }
- if ( mem [ p ] .hh.b1 >= 100 )
- {
- leaderbox = mem [ p + 1 ] .hh .v.RH ;
- if ( mem [ leaderbox ] .hh.b0 == 2 )
- {
- ruleht = mem [ leaderbox + 3 ] .cint ;
- ruledp = mem [ leaderbox + 2 ] .cint ;
- goto lab14 ;
- }
- leaderwd = mem [ leaderbox + 1 ] .cint ;
- if ( ( leaderwd > 0 ) && ( rulewd > 0 ) )
- {
- rulewd = rulewd + 10 ;
- edge = curh + rulewd ;
- lx = 0 ;
- if ( mem [ p ] .hh.b1 == 100 )
- {
- saveh = curh ;
- curh = leftedge + leaderwd * ( ( curh - leftedge ) / leaderwd )
- ;
- if ( curh < saveh )
- curh = curh + leaderwd ;
- }
- else {
-
- lq = rulewd / leaderwd ;
- lr = rulewd % leaderwd ;
- if ( mem [ p ] .hh.b1 == 101 )
- curh = curh + ( lr / 2 ) ;
- else {
-
- lx = ( 2 * lr + lq + 1 ) / ( 2 * lq + 2 ) ;
- curh = curh + ( ( lr - ( lq - 1 ) * lx ) / 2 ) ;
- }
- }
- while ( curh + leaderwd <= edge ) {
-
- curv = baseline + mem [ leaderbox + 4 ] .cint ;
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- savev = dviv ;
- if ( curh != dvih )
- {
- movement ( curh - dvih , 143 ) ;
- dvih = curh ;
- }
- saveh = dvih ;
- tempptr = leaderbox ;
- outerdoingleaders = doingleaders ;
- doingleaders = true ;
- if ( mem [ leaderbox ] .hh.b0 == 1 )
- vlistout () ;
- else hlistout () ;
- doingleaders = outerdoingleaders ;
- dviv = savev ;
- dvih = saveh ;
- curv = savev ;
- curh = saveh + leaderwd + lx ;
- }
- curh = edge - 10 ;
- goto lab15 ;
- }
- }
- goto lab13 ;
- }
- break ;
- case 11 :
- case 9 :
- curh = curh + mem [ p + 1 ] .cint ;
- break ;
- case 6 :
- {
- mem [ memtop - 12 ] = mem [ p + 1 ] ;
- mem [ memtop - 12 ] .hh .v.RH = mem [ p ] .hh .v.RH ;
- p = memtop - 12 ;
- goto lab21 ;
- }
- break ;
- default:
- ;
- break ;
- }
- goto lab15 ;
- lab14: if ( ( ruleht == -1073741824L ) )
- ruleht = mem [ thisbox + 3 ] .cint ;
- if ( ( ruledp == -1073741824L ) )
- ruledp = mem [ thisbox + 2 ] .cint ;
- ruleht = ruleht + ruledp ;
- if ( ( ruleht > 0 ) && ( rulewd > 0 ) )
- {
- if ( curh != dvih )
- {
- movement ( curh - dvih , 143 ) ;
- dvih = curh ;
- }
- curv = baseline + ruledp ;
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- {
- dvibuf [ dviptr ] = 132 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- dvifour ( ruleht ) ;
- dvifour ( rulewd ) ;
- curv = baseline ;
- dvih = dvih + rulewd ;
- }
- lab13: curh = curh + rulewd ;
- lab15: p = mem [ p ] .hh .v.RH ;
- }
- prunemovements ( saveloc ) ;
- if ( curs > 0 )
- dvipop ( saveloc ) ;
- decr ( curs ) ;
- }
- void vlistout ( )
- {/* 13 14 15 */ vlistout_regmem
- scaled leftedge ;
- scaled topedge ;
- scaled saveh, savev ;
- halfword thisbox ;
- glueord gorder ;
- schar gsign ;
- halfword p ;
- integer saveloc ;
- halfword leaderbox ;
- scaled leaderht ;
- scaled lx ;
- boolean outerdoingleaders ;
- scaled edge ;
- thisbox = tempptr ;
- gorder = mem [ thisbox + 5 ] .hh.b1 ;
- gsign = mem [ thisbox + 5 ] .hh.b0 ;
- p = mem [ thisbox + 5 ] .hh .v.RH ;
- incr ( curs ) ;
- if ( curs > 0 )
- {
- dvibuf [ dviptr ] = 141 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- if ( curs > maxpush )
- maxpush = curs ;
- saveloc = dvioffset + dviptr ;
- leftedge = curh ;
- curv = curv - mem [ thisbox + 3 ] .cint ;
- topedge = curv ;
- while ( p != 0 ) {
-
- if ( ( p >= himemmin ) )
- confusion ( 821 ) ;
- else {
-
- switch ( mem [ p ] .hh.b0 )
- {case 0 :
- case 1 :
- if ( mem [ p + 5 ] .hh .v.RH == 0 )
- curv = curv + mem [ p + 3 ] .cint + mem [ p + 2 ] .cint ;
- else {
-
- curv = curv + mem [ p + 3 ] .cint ;
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- saveh = dvih ;
- savev = dviv ;
- curh = leftedge + mem [ p + 4 ] .cint ;
- tempptr = p ;
- if ( mem [ p ] .hh.b0 == 1 )
- vlistout () ;
- else hlistout () ;
- dvih = saveh ;
- dviv = savev ;
- curv = savev + mem [ p + 2 ] .cint ;
- curh = leftedge ;
- }
- break ;
- case 2 :
- {
- ruleht = mem [ p + 3 ] .cint ;
- ruledp = mem [ p + 2 ] .cint ;
- rulewd = mem [ p + 1 ] .cint ;
- goto lab14 ;
- }
- break ;
- case 8 :
- outwhat ( p ) ;
- break ;
- case 10 :
- {
- g = mem [ p + 1 ] .hh .v.LH ;
- ruleht = mem [ g + 1 ] .cint ;
- if ( gsign != 0 )
- {
- if ( gsign == 1 )
- {
- if ( mem [ g ] .hh.b0 == gorder )
- ruleht = ruleht + round ( mem [ thisbox + 6 ] .gr * mem [ g + 2
- ] .cint ) ;
- }
- else {
-
- if ( mem [ g ] .hh.b1 == gorder )
- ruleht = ruleht - round ( mem [ thisbox + 6 ] .gr * mem [ g + 3
- ] .cint ) ;
- }
- }
- if ( mem [ p ] .hh.b1 >= 100 )
- {
- leaderbox = mem [ p + 1 ] .hh .v.RH ;
- if ( mem [ leaderbox ] .hh.b0 == 2 )
- {
- rulewd = mem [ leaderbox + 1 ] .cint ;
- ruledp = 0 ;
- goto lab14 ;
- }
- leaderht = mem [ leaderbox + 3 ] .cint + mem [ leaderbox + 2 ]
- .cint ;
- if ( ( leaderht > 0 ) && ( ruleht > 0 ) )
- {
- ruleht = ruleht + 10 ;
- edge = curv + ruleht ;
- lx = 0 ;
- if ( mem [ p ] .hh.b1 == 100 )
- {
- savev = curv ;
- curv = topedge + leaderht * ( ( curv - topedge ) / leaderht )
- ;
- if ( curv < savev )
- curv = curv + leaderht ;
- }
- else {
-
- lq = ruleht / leaderht ;
- lr = ruleht % leaderht ;
- if ( mem [ p ] .hh.b1 == 101 )
- curv = curv + ( lr / 2 ) ;
- else {
-
- lx = ( 2 * lr + lq + 1 ) / ( 2 * lq + 2 ) ;
- curv = curv + ( ( lr - ( lq - 1 ) * lx ) / 2 ) ;
- }
- }
- while ( curv + leaderht <= edge ) {
-
- curh = leftedge + mem [ leaderbox + 4 ] .cint ;
- if ( curh != dvih )
- {
- movement ( curh - dvih , 143 ) ;
- dvih = curh ;
- }
- saveh = dvih ;
- curv = curv + mem [ leaderbox + 3 ] .cint ;
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- savev = dviv ;
- tempptr = leaderbox ;
- outerdoingleaders = doingleaders ;
- doingleaders = true ;
- if ( mem [ leaderbox ] .hh.b0 == 1 )
- vlistout () ;
- else hlistout () ;
- doingleaders = outerdoingleaders ;
- dviv = savev ;
- dvih = saveh ;
- curh = saveh ;
- curv = savev - mem [ leaderbox + 3 ] .cint + leaderht + lx ;
- }
- curv = edge - 10 ;
- goto lab15 ;
- }
- }
- goto lab13 ;
- }
- break ;
- case 11 :
- curv = curv + mem [ p + 1 ] .cint ;
- break ;
- default:
- ;
- break ;
- }
- goto lab15 ;
- lab14: if ( ( rulewd == -1073741824L ) )
- rulewd = mem [ thisbox + 1 ] .cint ;
- ruleht = ruleht + ruledp ;
- curv = curv + ruleht ;
- if ( ( ruleht > 0 ) && ( rulewd > 0 ) )
- {
- if ( curh != dvih )
- {
- movement ( curh - dvih , 143 ) ;
- dvih = curh ;
- }
- if ( curv != dviv )
- {
- movement ( curv - dviv , 157 ) ;
- dviv = curv ;
- }
- {
- dvibuf [ dviptr ] = 137 ;
- incr ( dviptr ) ;
- if ( dviptr == dvilimit )
- dviswap () ;
- }
- dvifour ( ruleht ) ;
- dvifour ( rulewd ) ;
- }
- goto lab15 ;
- lab13: curv = curv + ruleht ;
- }
- lab15: p = mem [ p ] .hh .v.RH ;
- }
- prunemovements ( saveloc ) ;
- if ( curs > 0 )
- dvipop ( saveloc ) ;
- decr ( curs ) ;
- }
-